<?php
use Common\Library\Constant;
use Common\Library\BusinessException;
use Common\Library\SendSMS;

/**
 * Created by PhpStorm.
 * User: csyr
 * Date: 16/6/25
 * Time: 下午5:39
 */

/**
 * 判断是否为手机号
 * @param string $mobile
 * @return int
 */
function is_mobile($mobile) {
    return preg_match(Constant::REGEX_MOBILE, $mobile);
}

function encrypt($data, $type = 'md5') {
    //todo: encrypt method
}

function decrypt($data) {
    //todo: decrypt method
}

function invalid_paypass($payPass) {
    return !preg_match(Constant::REGEX_PAY_PASS, $payPass);
}

/**
 * 手机号 filter
 * @param $mobile
 * @return mixed
 * @throws
 * @throws BusinessException
 * @throws \Think\Exception
 * @throws int
 * @throws string
 */
function mobile($mobile) {
    if (is_mobile($mobile)) {
        return $mobile;
    }

    BusinessException::throwException(Constant::INVALID_MOBILE);
}

/**
 * 生成请求参数的数字签名
 *
 * @param array $param
 * @return string
 */
function gen_sign(array $param) {
    //0. 删除原数据中自带的sign值,防止干扰计算结果
    unset($param['sign']);

    //1. 按key由a到z排序
    ksort($param);

    foreach ($param as $key => $value) {
        if (is_array($value)) {
            $param[$key] = gen_sign($value);
        }
    }

    //2. 生成以&符链接的key=value形式的字符串
    $paramString = urldecode(http_build_query($param));

    //3. 拼接我们的服务秘钥，并md5加密
    return md5($paramString . Constant::SECRET_KEY);
}

/*
 * rsa  sign|签名
 * */
function rong_sign(array $param) {
    //0. 删除原数据中自带的sign值,防止干扰计算结果
    unset($param['sign']);
    //1. 按key由a到z排序
    ksort($param);
    /*foreach ($param as $key => $value) {
        if (is_array($value)) {
            $param[$key] = rong_sign($value);
        }
    }*/

    //2. 生成以&符链接的key=value形式的字符串
    $paramString = urldecode(http_build_query($param));

    //3. 拼接我们的服务秘钥，并md5加密
    return $paramString;
}
function get_photo_path($fileName, $type) {
    return Constant::BASE_IMAGE_PATH . '/' . $type . '/' . $fileName;
}

function get_photo_url($fileName, $type) {
    return Constant::DOMAIN_URL . get_photo_path($fileName, $type);
}

function get_md5_password($password) {
    if (strlen($password) == 32 && ctype_xdigit($password)) {
        return mb_strtoupper($password);
    }

    return mb_strtoupper(md5($password));
}

function get_enc_password($password) {
    return password_hash(get_md5_password($password), PASSWORD_DEFAULT);
}

function password_unmatched($password, $hash) {
    return !password_verify(get_md5_password($password), $hash);
}

function yuan2fen($yuan) {
    return intval($yuan * 100);
}

function fen2yuan($fen) {
    return floatval($fen/100);
}

function get_repayment_time($interval) {
    return mktime(0, 0, 0, date('n') + $interval, Constant::BILL_LAST_DAY);
}

//当前日期加interval天
function add_days($interval) {
    $new_time = mktime(0, 0, 0, date('n'), date('d') + $interval);
    return $new_time;
}


//当前日期加interval个月
function get_repayment_date($interval) {
    $new_time = mktime(0, 0, 0, date('n') + $interval, date('j'));
    $diff_month = date('n', $new_time)-date('n') < 0 ? date('n', $new_time)-date('n')+12 : date('n', $new_time)-date('n');
    if($diff_month > $interval){
        $new_time = strtotime(date('Y-m-d', strtotime(date('Y-m-01', $new_time) . ' -1 day')));
    }
    return $new_time;
}

//当前日期减interval个月
function get_before_date($interval) {
    $new_time = mktime(0, 0, 0, date('n') - $interval, date('j'));
    $diff_month = date('n')-date('n', $new_time) < 0 ? date('n')-date('n', $new_time)+12 : date('n')-date('n', $new_time);
    if($diff_month < $interval){
        $new_time = strtotime(date('Y-m-d', strtotime(date('Y-m-01', $new_time) . ' -1 day')));
    }
    return $new_time;
}

/**
 * CMF密码加密方法
 * @param string $pw 要加密的字符串
 * @return string
 */
function sp_password($pw,$authcode=''){
    if(empty($authcode)){
        $authcode=C("AUTHCODE");
        \Think\Log::write("authcode=".C('AUTHCODE'), \Think\Log::DEBUG);
    }
    $result="###".md5(md5($authcode.$pw));
    \Think\Log::write("result')=".$result, \Think\Log::DEBUG);
    return $result;
}

/**
 * CMF密码比较方法,所有涉及密码比较的地方都用这个方法
 * @param string $password 要比较的密码
 * @param string $password_in_db 数据库保存的已经加密过的密码
 * @return boolean 密码相同，返回true
 */
function sp_compare_password($password,$password_in_db){
    if(strpos($password_in_db, "###")===0){
        return sp_password($password)==$password_in_db;
    }else{
        return sp_password_old($password)==$password_in_db;
    }
}

/**
 * CMF密码加密方法 (X2.0.0以前的方法)
 * @param string $pw 要加密的字符串
 * @return string
 */
function sp_password_old($pw){
    $decor=md5(C('DB_PREFIX'));
    $mi=md5($pw);
    return substr($decor,0,12).$mi.substr($decor,-4,4);
}
/*
 * 获取配置参数
 * */
function getConfig($name)
{
    if ('' === $name) {
        return '';
    }
    $where['name'] = $name;
    $where['status'] = 1;
    $res = M('admin_config',null)->where($where)->getField('extra');
    if ($res) {
        return $res;
    } else {
        return '';
    }
}

function CheckToken($token){
    $key = 'huoyan2017dafa';
    if ($token == md5(date('Y-m-d H').$key)){
        return true;
    }
    return false;
}